package sanrenxing.dayEnd.backRepertoryTotal.controller;

import org.omg.PortableServer.LIFESPAN_POLICY_ID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sanrenxing.dayEnd.backRepertoryTotal.dao.SecRecAndPayStockDao;
import sanrenxing.dayEnd.backRepertoryTotal.domain.AssetValuation;
import sanrenxing.dayEnd.backRepertoryTotal.domain.SecRecAndPayStock;
import sanrenxing.dayEnd.backRepertoryTotal.service.AssetValuationBiz;
import sanrenxing.dayEnd.backRepertoryTotal.service.ValuationService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 功能：资产估值的控制器类
 * 作者：赵思睿
 * 日期：2021/3/30 0030-15:15
 * 版本：1.0
 */
@RestController
@RequestMapping("/assetValuation")
public class AssetValuationController {
    //定义资产估值业务层接口
    @Autowired
    private AssetValuationBiz assetValuationBiz;
    //定义证券应收应付数据层接口
    @Autowired
    private SecRecAndPayStockDao srapDao;
    //定义资产估值业务层接口
    @Autowired
    private ValuationService valuationService;

    /**
     * 显示页面
     * @param request 请求对象
     * @return 映射对象集合
     */
    @GetMapping("/asset")
    public Map<String,Object> findAll(HttpServletRequest request){
        //定义一个session对象
        HttpSession session = request.getSession();
        //判断session传过来的日期，如果不为空，且为今天的日期
        if (session.getAttribute("AssetDate")!=null && session.getAttribute("AssetDate").equals(new SimpleDateFormat("yyyy-MM-dd").format(new Date()))){
            //得到资产估值集合对象
            List<AssetValuation> assetList=assetValuationBiz.findAll();
            //循环遍历资产估值集合对象
            for (AssetValuation asset : assetList) {
                //设置资产估值对象的是否估值为已估值
                asset.setIfValuation("已估值");
            }
            //定义映射对象集合
            Map<String,Object> map=new HashMap<>();
            //在映射集合中添加状态码
            map.put("code",0);
            //在映射集合中添加响应信息字符串
            map.put("msg","");
            //在映射集合中添加资产估值集合对象
            map.put("data",assetList);
            //在映射集合中添加总行数的数据对为5行
            map.put("count",5);
            //返回映射对象集合
            return map;
        }else {
            //得到资产估值集合对象
            List<AssetValuation> assetList = assetValuationBiz.findAll();
            //循环遍历资产估值集合对象
            for (AssetValuation asset : assetList) {
                //设置资产估值对象的估值增值为0
                asset.setValuation(0);
                //设置资产估值对象的是否估值为未估值
                asset.setIfValuation("未估值");
            }
            //定义映射对象集合
            Map<String, Object> map = new HashMap<>();
            //在映射集合中添加状态码
            map.put("code",0);
            //在映射集合中添加响应信息字符串
            map.put("msg","");
            //在映射集合中添加资产估值集合对象
            map.put("data",assetList);
            //在映射集合中添加总行数的数据对为5行
            map.put("count",5);
            //返回映射对象集合
            return map;
        }
    }

    /**
     * 点击估值
     * @param request 请求对象
     * @return already:已估值；success:估值成功
     */
    @GetMapping("/valuation")
    public String valuation(HttpServletRequest request){
        //定义一个session对象
        HttpSession session = request.getSession();
        //判断session传过来的日期，如果不为空，且日期等于今天
        if (session.getAttribute("AssetDate")!=null && session.getAttribute("AssetDate").equals(new SimpleDateFormat("yyyy-MM-dd").format(new Date()))){
            //已估值
            return "already";
        }else{
            //清除证券应收应付中的估值增值数据
            valuationService.delete();
            //设置session中保存的日期为今天的日期
            session.setAttribute("AssetDate",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));

            //得到资产估值集合对象
            List<AssetValuation> assetValuationList=assetValuationBiz.findAll();
            //定义证券应收应付库存对象
            SecRecAndPayStock srapStock=new SecRecAndPayStock();
            //循环取出资产估值对象中的数据
            for (AssetValuation assetValuation:assetValuationList){
                //设置证券应收应付库存的证券编号
                srapStock.setSeId(assetValuation.getSeId());
                //设置证券应收应付库存的基金编号
                srapStock.setFundId(assetValuation.getFundId());
                //设置证券应收应付库存的业务类型为估值增值
                srapStock.setBusinType("估值增值");
                //设置证券应收应付库存的业务日期
                srapStock.setDates(assetValuation.getDates());
                //设置证券应收应付库存的总金额
                srapStock.setSumMoney(assetValuation.getValuation());
                //设置证券应收应付库存的证券数量
                srapStock.setSecNum(assetValuation.getSecNum());
                //设置证券应收应付库存的业务状态为流入1
                srapStock.setBusinStat(1);
                //设置证券应收应付库存的现金账户编号
                srapStock.setCaId(assetValuation.getCaId());
                //调用证券应收应付库存业务层的添加方法
                srapDao.add(srapStock);
                //删除证券应收应付库存中之前的所有估值增值数据
                assetValuationBiz.delete();
            }
            //确认估值
            return "success";
        }
    }
}
